#ifndef WAREHOUSE_H
#define WAREHOUSE_H

#include <QString>
#include <QDateTime>

/**
 * @brief 仓库表实体类
 *
 * 该类对应数据库中的仓库表，用于存储仓库的基础信息，
 * 包括仓库名称、物料总数量及时间戳等核心属性，
 * 提供标准化的访问方法以实现属性的安全操作。
 */
class Warehouse
{
private:
    int id;                     // 主键ID，唯一标识一个仓库
    QString warehouse_name;     // 仓库名称，用于区分不同仓库
    int warehouse_quantity;     // 仓库物料总数量，统计该仓库下所有物料的总和
    QDateTime create_time;      // 创建时间，记录仓库信息的创建时间戳
    QDateTime update_time;      // 更新时间，记录仓库信息最后一次修改的时间戳

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化所有数值类型属性为0，字符串为空，
     * 时间戳为默认值，适合需要后续通过setter方法设置属性的场景。
     */
    Warehouse()
        : id(0),
          warehouse_quantity(0)
    {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取记录后直接创建对象。
     *
     * @param id                仓库ID
     * @param warehouse_name    仓库名称
     * @param warehouse_quantity 仓库物料总数量
     * @param create_time       创建时间戳
     * @param update_time       最后更新时间戳
     */
    Warehouse(int id,
              const QString& warehouse_name,
              int warehouse_quantity,
              const QDateTime& create_time,
              const QDateTime& update_time)
        : id(id),
          warehouse_name(warehouse_name),
          warehouse_quantity(warehouse_quantity),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取仓库ID
     * @return 仓库的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取仓库名称
     * @return 仓库的名称字符串
     */
    QString get_warehouse_name() const { return warehouse_name; }

    /**
     * @brief 获取仓库物料总数量
     * @return 该仓库中所有物料的总数量
     */
    int get_warehouse_quantity() const { return warehouse_quantity; }

    /**
     * @brief 获取创建时间
     * @return 仓库记录的创建时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取最后更新时间
     * @return 仓库信息最后修改的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置仓库ID
     * @param value 新的仓库ID
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置仓库名称
     * @param value 新的仓库名称
     */
    void set_warehouse_name(const QString& value) { warehouse_name = value; }

    /**
     * @brief 设置仓库物料总数量
     * @param value 新的物料总数量
     */
    void set_warehouse_quantity(int value) { warehouse_quantity = value; }

    /**
     * @brief 设置创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置最后更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // WAREHOUSE_H
